/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package com.mx.saco.controller;


import java.io.Serializable;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;

import javax.annotation.PostConstruct;
import javax.ejb.EJB;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.bean.ViewScoped;
import javax.faces.context.FacesContext;

import org.dozer.DozerBeanMapperSingletonWrapper;
import org.primefaces.model.menu.DefaultMenuItem;
import org.primefaces.model.menu.DefaultMenuModel;
import org.primefaces.model.menu.DefaultSubMenu;
import org.primefaces.model.menu.MenuModel;

import com.mx.saco.bean.PaginaXhtmlBean;
import com.mx.saco.bean.PaginaXhtmlPadreBean;
import com.mx.saco.bean.UsuarioBean;
import com.mx.saco.service.MenuUsuarioService;
import com.mx.saco.util.Util;

/**
 *
 * @author jethro.gutierrez
 */
@ManagedBean
@ViewScoped
public class MenuController implements Serializable {

    private static final long serialVersionUID = 1L;
    public static final int NUMBER_IMAGE_MAX = 6;
    private final long SIZE_IMAGE_MAX = 2048000000L;
    private final String EXTENSION_IMAGE = "/(\\.|\\/)(gif|jpe?g|png)$/";
    private final int TIME_EXPIRED_SESSION = 900000;

    private String pagina = new String();
    private MenuModel model;
    private MenuModel _modelMenu;
    private Map<String, Long> comboUsuariosActivos = new LinkedHashMap<String, Long>();

    @EJB
    MenuUsuarioService menuUsuarioService;
   


    @PostConstruct
    public void init() {
        UsuarioBean usuarioBean = (UsuarioBean) FacesContext.getCurrentInstance().
                getExternalContext().getSessionMap().get(Util.USER_SESSION_KEY);
        if (usuarioBean != null) {
            consultaPaginasAccesiblesPorIdUsuario(usuarioBean.getIdUsuario());
        }
        construyeModelMenu();
    }

    public void seleccionaVista(String uiComponent) {
        this.pagina = uiComponent;
    }

    public void consultaPaginasAccesiblesPorIdUsuario(Long idUsuario) {
        Map<PaginaXhtmlPadreBean, List<PaginaXhtmlBean>> paginaAccesibles = this.menuUsuarioService
                .consultaPaginasAccesiblesPorIdUsuario(idUsuario);
        construyeMenu(paginaAccesibles);
    }

    public void construyeMenu(Map<PaginaXhtmlPadreBean, List<PaginaXhtmlBean>> paginaAccesibles) {
        model = new DefaultMenuModel();
        DefaultSubMenu subMenu;
        for (Map.Entry<PaginaXhtmlPadreBean, List<PaginaXhtmlBean>> entry : paginaAccesibles.entrySet()) {
            subMenu = DozerBeanMapperSingletonWrapper.getInstance().map(entry.getKey(), DefaultSubMenu.class);
            DefaultMenuItem item;
            
            for (PaginaXhtmlBean paginaXhtmlBean : entry.getValue()) {
                item = DozerBeanMapperSingletonWrapper.getInstance()
                        .map(paginaXhtmlBean, DefaultMenuItem.class);
                System.out.println(item.getValue());
                subMenu.addElement(item);
                //item.setAjax(true);
            }
            model.addElement(subMenu);
        }
    }

    public void construyeModelMenu() {
        _modelMenu = new DefaultMenuModel();
      /*  Map<PaginaXhtmlPadreBean, List<PaginaXhtmlBean>> menu = this.paginasMenuService.consultaMenu();
        for (Map.Entry<PaginaXhtmlPadreBean, List<PaginaXhtmlBean>> entry : menu.entrySet()) {
            DefaultSubMenu subMenu = DozerBeanMapperSingletonWrapper.getInstance().map(entry.getKey(), DefaultSubMenu.class);
            DefaultMenuItem item;
            for (PaginaXhtmlBean paginaXhtmlBean : entry.getValue()) {
                item = DozerBeanMapperSingletonWrapper.getInstance()
                        .map(paginaXhtmlBean, DefaultMenuItem.class);
                item.setUpdate(":formId:displayPermisos,:formId:guardaUsusario");
                item.setCommand("#{usuarioController.checkListPersmiso("
                        + "'" + paginaXhtmlBean.getIdPagina() + "',"
                        + "'" + subMenu.getLabel() + "',"
                        + "'" + paginaXhtmlBean.getpValue() + "'"
                        + ")}");
                
                subMenu.addElement(item);
            }
            _modelMenu.addElement(subMenu);
        }*/
    }
    /*
    public Map<String, Long> getComboUsuariosActivos() {
        return this.consultaCatalogoUsuarioActivos();
    }
   
    public Map<String, Long> consultaCatalogoUsuarioActivos() {
        Map<String, Long> empleadosActivos = new LinkedHashMap<String, Long>();
        List<UsuarioBean> listaUsuario = this.usuarioService.consultaTotalUsuarios();
        for (UsuarioBean usuario : listaUsuario) {
            empleadosActivos.put(usuario.getNombre(),
                    usuario.getIdUsuario());
        }
        return empleadosActivos;
    }
     */
    public MenuModel getModelMenu() {
        return _modelMenu;
    }

    public MenuModel getModel() {
    	construyeModelMenu();
        return model;
    }

    public String getPagina() {
        return this.pagina;
    }

    public long getSIZE_IMAGE_MAX() {
        return SIZE_IMAGE_MAX;
    }

    public int getTIME_EXPIRED_SESSION() {
        return TIME_EXPIRED_SESSION;
    }

    public String getEXTENSION_IMAGE() {
        return EXTENSION_IMAGE;
    }

    public static int getNUMBER_IMAGE_MAX() {
        return NUMBER_IMAGE_MAX;
    }

}
